package com.itheima.tlias84.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.tlias84.dto.SelectLogmsgDTO;
import com.itheima.tlias84.entity.Emp;
import com.itheima.tlias84.mapper.ReportMapper;
import com.itheima.tlias84.po.SelectLogmsgPageParam;
import com.itheima.tlias84.service.ReportService;
import com.itheima.tlias84.utils.ResultUtil;
import com.itheima.tlias84.vo.JobVO;
import com.itheima.tlias84.vo.PageVO;
import com.itheima.tlias84.vo.PersonVO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Service
public class ReportServiceImpl implements ReportService {
    @Resource
    ReportMapper reportMapper;

    @Override
    public List<PersonVO> getGenderStats() {
        int maleCount = reportMapper.countMale();
        int femaleCount = reportMapper.countFemale();

        List<PersonVO> personVOList = new ArrayList<>();
        personVOList.add(new PersonVO("男", maleCount));
        personVOList.add(new PersonVO("女", femaleCount));

        return personVOList;
    }

    @Override
    public JobVO getJobStats() {
//        List<Map<Integer,Integer>> jobCounts = reportMapper.countJobs();
//
//        //初始化数据
//        Map<Integer, Integer> initData = new HashMap<>();
//        initData.put(1, 0);
//        initData.put(2, 0);
//        initData.put(3, 0);
//        initData.put(4, 0);
//        initData.put(5, 0);
////        initData.put(null,0);
//        Set<Integer> set = initData.keySet();
//        for (Map<Integer, Integer> jobCount : jobCounts) {
//            Integer[] array = (Integer[]) jobCount.keySet().stream().toArray();
//            if (set.contains(array[0])){
//                initData.put(array[0],jobCount.get(array[0]));
//            }
//        }
//
//        List<String> jobList = new ArrayList<>();
//        List<Integer> dataList = new ArrayList<>();
//
//        initData.forEach((k, v) -> {
//            switch (k) {
//                case 1:
//                    jobList.add("班主任");
//                    dataList.add(v);
//                    break;
//                case 2:
//                    jobList.add("讲师");
//                    dataList.add(v);
//                    break;
//                case 3:
//                    jobList.add("学工主管");
//                    dataList.add(v);
//                    break;
//                case 4:
//                    jobList.add("教研主管");
//                    dataList.add(v);
//                    break;
//                case 5:
//                    jobList.add("咨询师");
//                    dataList.add(v);
//                    break;
//                default:
//                    jobList.add("其它");
//                    dataList.add(v);
//                    break;
//            }
//        });
//
//        JobVO jobVO = new JobVO();
//        jobVO.setJobList(jobList);
//        jobVO.setDataList(dataList);
//
//        return jobVO;
        List<Map<Integer, Integer>> jobCounts = reportMapper.countJobs();
        System.out.println(jobCounts);

//        Map<Integer, Integer> initData = new HashMap<>();
//        initData.put(1, 0); // 班主任
//        initData.put(2, 0); // 讲师
//        initData.put(3, 0); // 学工主管
//        initData.put(4, 0); // 教研主管
//        initData.put(5, 0); // 咨询师
//        initData.put(null, 0); // 其它

        ArrayList<Long> jobList1= new ArrayList<>();
        ArrayList<Long> dataList1 = new ArrayList<>();

        for (Map<Integer, Integer> jobCount : jobCounts) {
            if (Objects.isNull((jobCount.get("job")))){
                continue;
            }

            jobList1.add(Long.valueOf(String.valueOf(jobCount.get("job"))));
            dataList1.add(Long.valueOf(String.valueOf(jobCount.get("dataList"))));
//            Integer job = jobCount.get("job");
//            Integer count = (jobCount.get("dataList").intValue());
//            if (initData.containsKey(job)) {
//                // 如果 job 是已知的，则更新对应的计数
//                initData.put(job, count);
//            } else {
//                // 如果 job 是未知的，则归类为“其它”
//                Integer otherCount = initData.get(null);
//                initData.put(0, otherCount + count);
//            }
        }
        // 初始化数据


        // 更新统计数据
//        for (Map<Integer, Integer> jobCount : jobCounts) {
//            Integer s = jobCount.get("job");
//            Integer i = (int)jobCount.get("COUNT(id)");
//            System.out.println(s);
//            System.out.println(i);
//            for (Map.Entry<Integer, Integer> entry : jobCount.entrySet()) {
//                Integer job =   entry.getKey();
//                Integer count =  entry.getValue();
//
////                Integer job1 = (int)job.charAt(job.length() - 1);
////                Integer count1 = (int)count.charAt(count.length() - 1);
//
//                if (initData.containsKey(job)) {
//                    // 如果 job 是已知的，则更新对应的计数
//                    initData.put(job, count);
//                } else {
//                    // 如果 job 是未知的，则归类为“其它”
//                    Integer otherCount = initData.get(null);
//                    initData.put(0, otherCount + count);
//                }
//            }
//        }

        List<String> jobList = new ArrayList<>();
        List<Integer> dataList = new ArrayList<>();

        for (int i = 0; i < jobList1.size(); i++) {
            int job = jobList1.get(i).intValue();
            switch (job){
                case 1:
                    jobList.add("班主任");
                    dataList.add(dataList1.get(i).intValue());
                    break;
                case 2:
                    jobList.add("讲师");
                    dataList.add(dataList1.get(i).intValue());
                    break;
                case 3:
                    jobList.add("学工主管");
                    dataList.add(dataList1.get(i).intValue());
                    break;
                case 4:
                    jobList.add("教研主管");
                    dataList.add(dataList1.get(i).intValue());
                    break;
                case 5:
                    jobList.add("咨询师");
                    dataList.add(dataList1.get(i).intValue());
                    break;
                default:
                    jobList.add("其它");
                    dataList.add(dataList1.get(i).intValue());
                    break;
            }
        }
//        initData.forEach((k, v) -> {
//            System.out.println(k);
//            System.out.println(v);
//        });

        // 准备返回的数据结构
//        initData.forEach((k, v) -> {
//            switch (k) {
//                case 1:
//                    jobList.add("班主任");
//                    dataList.add(v);
//                    break;
//                case 2:
//                    jobList.add("讲师");
//                    dataList.add(v);
//                    break;
//                case 3:
//                    jobList.add("学工主管");
//                    dataList.add(v);
//                    break;
//                case 4:
//                    jobList.add("教研主管");
//                    dataList.add(v);
//                    break;
//                case 5:
//                    jobList.add("咨询师");
//                    dataList.add(v);
//                    break;
//                default:
//                    jobList.add("其它");
//                    dataList.add(v);
//                    break;
//            }
//        });

        JobVO jobVO = new JobVO();
        jobVO.setJobList(jobList);
        jobVO.setDataList(dataList);

        return jobVO;
    }

    @Override
    public ResultUtil selectLogmsg(SelectLogmsgPageParam param) {
        Page<Object> page = PageHelper.startPage(param.getPage(), param.getPageSize());
        List<SelectLogmsgDTO> selectLogmsgDTOS = reportMapper.selectLogmsg(param);
        PageVO<SelectLogmsgDTO> pageVO = new PageVO<>();
        pageVO.setTotal(page.getTotal());
        pageVO.setRows(selectLogmsgDTOS);
        return ResultUtil.success(pageVO);
    }
}
